package com.brillilab.service.core.space;

import com.brillilab.domain.enums.space.BoxTypeEnum;
import com.brillilab.domain.enums.space.SpaceTypeEnum;
import com.brillilab.domain.po.space.Panel;
import com.brillilab.domain.po.space.PanelGridUsed;

import java.util.List;

public interface IPanelService {
    /**
     * @return java.lang.Long
     * @Description: only insert panel data into db
     * @Params: [panel]
     * @author wuzhiyu
     * @date 2018/11/15 9:28
     */
    Long add(Panel panel);

    /**
     * @return boolean
     * @Description: only insert panel list data into db
     * @Params: [panelList]
     * @author wuzhiyu
     * @date 2018/11/15 9:28
     */
    boolean addList(List<Panel> panelList);

    /**
     * @return boolean
     * @Description: only delete panels data from db by spaceId and spaceTypeEnum
     * @Params: [spaceId, spaceTypeEnum]
     * @author wuzhiyu
     * @date 2018/11/15 9:29
     */
    boolean delete(Long spaceId, SpaceTypeEnum spaceTypeEnum);

    /**
     * @return com.brillilab.domain.po.reagent.Panel
     * @Description: get one panel
     * @Params: [panelId]
     * @author wuzhiyu
     * @date 2018/11/15 10:44
     */
    Panel get(Long panelId);

    /**
     * @return boolean
     * @Description: updateInfo panel basic info
     * @Params: [panel]
     * @author wuzhiyu
     * @date 2018/11/15 10:52
     */
    boolean update(Panel panel);

    /**
     * @return boolean
     * @Description: delete panel by id in list
     * @Params: [idList]
     * @author wuzhiyu
     * @date 2018/11/15 14:18
     */
    boolean deleteList(List<Long> idList);

    /**
     * @return boolean
     * @Description: deletePanelGridUsed
     * @Params: [list]
     * @author wuzhiyu
     * @date 2018/11/15 17:33
     */
    boolean deletePanelGridUsed(List<PanelGridUsed> list);

    /**
     * @return java.util.List<com.brillilab.domain.po.reagent.Panel>
     * @Description: get panel list by lanId and zone
     * @Params: [labId, zone]
     * @author wuzhiyu
     * @date 2018/11/19 13:11
     */
    List<Panel> getPanelList(Long labId, Integer zone);

    /**
     * @return java.util.List<com.brillilab.domain.po.reagent.PanelGridUsed>
     * @Description: getPanelGridUsedList by panelId
     * @Params: [panelId]
     * @author wuzhiyu
     * @date 2018/11/19 14:01
     */
    List<PanelGridUsed> getPanelGridUsedList(Long panelId);

    /**
     * @return java.lang.Integer
     * @Description: TODO
     * @Params: [list]
     * @author wuzhiyu
     * @date 2018/11/20 15:44
     */
    Integer addPanelGridUsedList(List<PanelGridUsed> list);

    /**
     * @return java.lang.Integer
     * @Description: TODO
     * @Params: [boxId, boxTypeEnum]
     * @author wuzhiyu
     * @date 2018/11/20 19:16
     */
    Integer deletePanelGridUsedByBoxId(Long boxId, BoxTypeEnum boxTypeEnum);

    /**
     * @return java.util.List<com.brillilab.domain.po.reagent.Panel>
     * @Description: get panelList by deviceId
     * @Params: [deviceId]
     * @author wuzhiyu
     * @date 2018/11/15 10:10
     */
    List<Panel> getPanelList(Long deviceId);

    /**
     * @return boolean
     * @Description: TODO
     * @Params: [list]
     * @author wuzhiyu
     * @date 2018/12/25 13:27
     */
    boolean updateList(List<Panel> list);

    /**
     * @return boolean
     * @Description: TODO
     * @Params: [panelId]
     * @author wuzhiyu
     * @date 2019/1/10 10:47
     */
    boolean deletePanelGridUsedByPanelIdList(List<Long> idList);

    /**
     * @return boolean
     * @Description: TODO
     * @Params: [deviceId]
     * @author wuzhiyu
     * @date 2019/1/10 10:52
     */
    boolean deletePanelGridUsedByDeviceId(Long deviceId);

    /**
     * @return boolean
     * @Description: TODO
     * @Params: [roomId]
     * @author wuzhiyu
     * @date 2019/1/10 11:00
     */
    boolean deletePanelGridUsedByRoomId(Long roomId);

    /**
     * @return boolean
     * @Description: TODO
     * @Params: [roomId, name]
     * @author wuzhiyu
     * @date 2019/1/10 15:34
     */
    boolean updateRoomName(Long roomId, String name);

    List<Panel> getListByIdList(List<Long> paneIdList);

    List<PanelGridUsed> getPanelGridUsedListByIdList(List<Long> panelIdList);

    List<PanelGridUsed> getPanelGridUsedListByBoxId(Long boxId, BoxTypeEnum boxType);

    Integer deletePanelGridUsedByBoxIdList(List<Long> boxIdList, BoxTypeEnum boxType);

    List<Panel> getLabPanelList(Long labId);

    List<PanelGridUsed> getPanelGridUsedListByBoxIdList(List<Long> boxIdList, BoxTypeEnum boxType);

    boolean updateInventoryOwnerByPanelId(Long panelId,Long labMemberId);

    boolean updateInfo(Long panelId,String remark, String userReagentType, Long labMemberId);
}
